package com.zenithmind.version.pojo.domain;

import com.baomidou.mybatisplus.annotation.TableName;
import com.zenithmind.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;

/**
 * 提交实体类 - 遵循单一职责原则，只包含提交基本信息
 *
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("version_commit")
@Schema(description = "提交实体")
public class Commit extends BaseEntity {

    /**
     * 仓库ID
     */
    @Schema(description = "仓库ID")
    private String repositoryId;

    /**
     * 分支ID
     */
    @Schema(description = "分支ID")
    private String branchId;

    /**
     * 分支名称
     */
    @Schema(description = "分支名称")
    private String branchName;

    /**
     * 提交哈希值
     */
    @Schema(description = "提交哈希值")
    private String hash;

    /**
     * 短哈希值
     */
    @Schema(description = "短哈希值")
    private String shortHash;

    /**
     * 提交消息
     */
    @Schema(description = "提交消息")
    private String message;

    /**
     * 提交描述
     */
    @Schema(description = "提交描述")
    private String description;

    /**
     * 作者ID
     */
    @Schema(description = "作者ID")
    private String authorId;

    /**
     * 提交者ID
     */
    @Schema(description = "提交者ID")
    private String committerId;

    /**
     * 父提交ID
     */
    @Schema(description = "父提交ID")
    private String parentCommitId;

    /**
     * 父提交哈希
     */
    @Schema(description = "父提交哈希")
    private String parentCommitHash;

    /**
     * 提交类型（1-普通提交，2-合并提交，3-初始提交，4-回滚提交）
     */
    @Schema(description = "提交类型（1-普通提交，2-合并提交，3-初始提交，4-回滚提交）")
    private Integer type;

    /**
     * 提交状态（1-成功，2-失败，3-处理中）
     */
    @Schema(description = "提交状态（1-成功，2-失败，3-处理中）")
    private Integer status;

    /**
     * 提交时间
     */
    @Schema(description = "提交时间")
    private LocalDateTime commitTime;

    /**
     * 推送时间
     */
    @Schema(description = "推送时间")
    private LocalDateTime pushTime;

    /**
     * 检查是否为合并提交
     *
     * @return 是否为合并提交
     */
    public boolean isMergeCommit() {
        return Integer.valueOf(2).equals(this.type);
    }

    /**
     * 检查是否为初始提交
     *
     * @return 是否为初始提交
     */
    public boolean isInitialCommit() {
        return Integer.valueOf(3).equals(this.type);
    }

    /**
     * 检查提交是否成功
     *
     * @return 提交是否成功
     */
    public boolean isSuccessful() {
        return Integer.valueOf(1).equals(this.status);
    }

    /**
     * 获取短哈希值（如果没有则从完整哈希生成）
     *
     * @return 短哈希值
     */
    public String getShortHashValue() {
        if (shortHash != null && !shortHash.isEmpty()) {
            return shortHash;
        }
        if (hash != null && hash.length() >= 8) {
            return hash.substring(0, 8);
        }
        return hash;
    }
}
